package com.xzmzhp.utils.return_tool;

import com.xzmzhp.constant.ReturnConstant;
import lombok.Data;
import lombok.NonNull;

/**
 * @author 王源(xm)
 * @Date: 2020/11/13 16:31
 * @Description: 返回前台数据格式
 */
@Data
@NonNull
public class ReturnData {
    /**
     * 状态码
     * 成功返回 0 200
     * 报错返回 500
     */
    private int code;

    /**
     * 返回信息
     */
    private String message;

    /**
     * 返回数据
     */
    private Object data;

    /**
     * 总条数
     */
    private long count;

    /**
     * 成功时调用的有参构造
     *
     * @param code  状态码
     * @param data  返回数据
     * @param count 总条数
     */
    public ReturnData(int code, Object data, long count) {
        this.code = code;
        this.data = data;
        this.count = count;
    }

    /**
     * 成功时调用的有参构造
     *
     * @param code 状态码
     * @param data 返回数据
     */
    public ReturnData(int code, Object data) {
        this.code = code;
        this.data = data;
    }

    /**
     * 成功时调用的有参构造
     *
     * @param code 状态码
     */
    public ReturnData(int code) {
        this.code = code;
    }

    /**
     * 成功时调用的有参构造
     *
     * @param code 状态码
     * @param data 返回数据
     */
    public ReturnData(int code, Object data, String message) {
        this.code = code;
        this.data = data;
        this.message = message;
    }

    /**
     * 失败时调用的有参构造
     *
     * @param code    状态码
     * @param message 错误信息
     */
    public ReturnData(int code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 查询成功调用方法
     *
     * @param data 数据
     * @return ReturnData对象
     */
    public static ReturnData ok(Object data) {
        return new ReturnData(ReturnConstant.SUCCESS, data);
    }

    /**
     * 查询成功调用方法
     *
     * @param data 数据
     * @return ReturnData对象
     */
    public static ReturnData ok(Object data, long count) {
        return new ReturnData(ReturnConstant.SUCCESS, data, count);
    }

    /**
     * 增删改调用方法
     *
     * @return ReturnData对象
     */
    public static ReturnData ok() {
        return new ReturnData(ReturnConstant.SUCCESS);
    }

    /**
     * 校验调用方法
     *
     * @return ReturnData对象
     */
    public static ReturnData ok(Object data, String message) {
        return new ReturnData(ReturnConstant.SUCCESS, data, message);
    }

    /**
     * 错误调用方法
     *
     * @param code    状态码
     * @param message 消息
     * @return ReturnData对象
     */
    public static ReturnData error(int code, String message) {
        return new ReturnData(code, message);
    }
}
